const http = require('http');
const fs = require('fs');
const path = require('path');

// 导入我们的HTML到DOCX转换库
const { htmlToDocx, docxToBuffer } = require('../dist/umd/index.umd.js');

// 创建HTTP服务器
const server = http.createServer(async (req, res) => {
  // 获取URL路径
  const url = req.url;

  // 处理根路径请求，提供测试页面
  if (url === '/') {
    const htmlContent = fs.readFileSync(path.join(__dirname, 'user-color-test.html'), 'utf8');
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
    res.end(htmlContent);
  }
  // 处理转换请求
  else if (url === '/convert' && req.method === 'POST') {
    let body = '';

    // 收集请求体数据
    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', async () => {
      try {
        // 解析请求体中的HTML内容
        const data = JSON.parse(body);
        const htmlContent = data.html || '';

        if (!htmlContent) {
          res.writeHead(400, { 'Content-Type': 'application/json' });
          res.end(JSON.stringify({ error: 'HTML内容不能为空' }));
          return;
        }

        // 转换HTML到DOCX
        console.log('开始转换HTML到DOCX...');
        const { document, warnings } = await htmlToDocx(htmlContent);

        // 转换DOCX到Buffer
        console.log('转换DOCX到Buffer...');
        const buffer = await docxToBuffer(document);

        // 设置响应头 - 对中文字符进行URL编码
        res.writeHead(200, {
          'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
          'Content-Disposition': `attachment; filename*=UTF-8''${encodeURIComponent('测试文档')}-${Date.now()}.docx`,
          'Content-Length': buffer.length
        });

        // 发送文件数据
        res.end(buffer);

        // 记录转换结果
        console.log('转换成功，文件已发送给客户端');
        if (warnings.length > 0) {
          console.log('转换警告:', warnings);
        }
      } catch (error) {
        console.error('转换失败:', error);
        res.writeHead(500, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ error: error.message || '转换失败，请重试' }));
      }
    });
  }
  // 处理静态文件请求
  else {
    const filePath = path.join(__dirname, url);

    // 检查文件是否存在
    fs.stat(filePath, (err, stats) => {
      if (err || !stats.isFile()) {
        res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
        res.end('文件未找到');
        return;
      }

      // 读取并发送文件
      const fileStream = fs.createReadStream(filePath);
      res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
      fileStream.pipe(res);
    });
  }
});

// 启动服务器
const PORT = 3001;
server.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
  console.log('请打开浏览器访问上述地址进行HTML到DOCX的转换测试');
  console.log('这个服务器特别用于测试HTML中CSS样式（特别是颜色）是否能正确地继承到转换后的DOCX文档中');
});
